package com.wyz.activemq.utils;

import com.wyz.activemq.queue.Producer;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * @Author: wyz
 * @Date: 2019/4/12 22:23
 * @Description:
 */
public class ActiveConnectionUtil {

    private ActiveConnectionUtil(){}

    /**
     * 获取Consumer方法
     * @param url  ActiveMQ的服务地址
     * @param queueName 队列名称
     * @param acknowledge 签收机制
     * @return MessageConsumer 返回消费者
     * @throws JMSException
     */
    public static MessageConsumer getConsumer(String url, String queueName, int acknowledge) throws JMSException {
       //获取Session
        Session session = getSession(url, acknowledge);
        //创建消息队列
        Queue queue = session.createQueue(queueName);
       //创建消费者，并返回
        return session.createConsumer(queue);
    }

    /**
     * 获取producer方法
     * @param url ActiveMQ的服务地址
     * @param queueName 创建的队列名称
     * @param acknowledge 签收机制
     * @return MessageProducer 返回生产者
     * @throws JMSException
     */
    public  static MessageProducer getProducer(String url, String queueName, int acknowledge) throws JMSException {
       //获取Session对象
        Session session = getSession(url, acknowledge);
        //创建消息队列
        Queue queue = session.createQueue(queueName);
        //创建生产者
        return session.createProducer(queue);
    }

    /**
     * 创建ActiveMQ连接 返回Session会话对象
     * @param url ActiveMQ的服务地址
     * @param acknowledge 签收机制
     * @return Session 返回Session会话对象
     * @throws JMSException
     */
    public static Session getSession(String url, int acknowledge) throws JMSException {
        //创建ActiveMQConnectionFactory对象
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(url);
        //创建连接
        Connection connection = factory.createConnection();
        //启动连接
        connection.start();
        //创建Session对象 并返回
        return connection.createSession(false, acknowledge);
    }
}
